package com.huangsm.juc.volatile1;


/**
 * 模拟CAS算法
 */
public class TestCompareAndSwap {
    public static void main(String[] args) {
        final CompareAndSwap cas=new CompareAndSwap();
        for (int i = 0; i < 10; i++) {
            Runnable task=()->{
                int expectedValue = cas.get();
                System.out.println(  cas.compareAndSet(expectedValue, (int) (Math.random() * 101)));
            };
            task.run();
        }
    }
}

class CompareAndSwap{
    private int value;

    //获取内存值
    public synchronized int get(){
        return value;
    }
    //比较
    public synchronized int compareAndSwap(int expectedValue,int newValue){
        int oldValue=value;
        if (oldValue==expectedValue){
            this.value=newValue;
        }
        return oldValue;
    }

    //设置值
    public synchronized boolean compareAndSet(int expectedValue,int newValue){
        return expectedValue == compareAndSwap(expectedValue, newValue);
    }


}
